package poo.eratostene;

import java.util.*;

;

public class CrivelloSet extends CrivelloAstratto {

	private Set<Integer> crivello = new LinkedHashSet<>();
	private Set<Integer> primi = new LinkedHashSet<>();
	private int n;

	public CrivelloSet(int n) {
		assert n >= 2;
		this.n = n;
		for (int i = 2; i <= n; i++)
			crivello.add(i);
	}

	public int size() {
		return primi.size();
	}

	@Override
	public Iterator<Integer> iterator() {
		return primi.iterator();

	}

	@Override
	public void filtra() {
		while (!crivello.isEmpty()) {
			// prendere il minimo.
			int min = crivello.iterator().next();
			primi.add(min);
			//
			int mult = min;

			while (mult <= n) {
				crivello.remove(mult);
				mult = mult + min;

			}
		}// while

	}// filtra

	public static void main(String[] args) {

		int n = 100;
		Crivello c = new CrivelloSet(n);
		c.filtra();
		System.out.println(c);
		System.out.println("I primi compresi tra 2 e " + n + " sono "
				+ c.size());
	}

}
